跳到主要内容

Git 查看日志相关命令

平时使用 Git 不只是各种提交,更多时候也需要检查当前提交日志,检查更新内容等操作

log 查看日志

Git 提交历史一般常用两个命令:

git log - 查看历史提交记录。
git blame <file> - 以列表形式查看指定文件的历史修改记录。

在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,可以使用 git log 命令查看。

$ git log
commit 291ec4e89252852d99cc4779f64f2aae90ce946e (HEAD -> master, origin/master)
Author: alsritter <alsritter@outlook.com>
Date: Wed Mar 9 00:40:58 2022 +0800

cccc

commit 6bc4e269130aa5c8a5708e387372a9ebf28f7e0a
Author: alsritter <alsritter@outlook.com>
Date: Tue Mar 8 23:54:56 2022 +0800

cccc

commit d39c816cd59e09a5b382bdcd67526360fd83511b
Author: alsritter <alsritter@outlook.com>
Date: Tue Mar 8 00:20:47 2022 +0800

ccc
....
$

显示相关

git status # 查看状态
git log # 显示日志(最完整的形式)

多屏显示时的操作(就是页数太多了,不是那个分屏)

  • 空格向下翻页
  • b 向上翻页
  • q 退出
git log --pretty=oneline  # 日志显示为一行

git log --oneline # 日志显示为一行(但是哈希只显示部分,且如果移动了 HEAD 则只显示后面的版本不显示前面的版本)

git reflog # 效果同上,但是多了个移动步数[推荐]

# 图形的方式显示
# 说明:
# --decorate 标记会让 git log 显示每个 commit 的引用(如:分支、tag等)
# --oneline 一行显示
# --simplify-by-decoration 只显示被 branch 或 tag 引用的 commit
# --all 表示显示所有的 branch,这里也可以选择:
# 比如我指向显示分支 ABC 的关系,则将 --all 替换为branchA branchB branchC

git log --graph --decorate --oneline --simplify-by-decoration --all

或者使用 gitk 工具(自带的 GUI 工具)

gitk --simplify-by-decoration --all

oneline 选项简洁输出

可以用 --oneline 选项来查看历史记录的简洁的版本。

$ git log --oneline
291ec4e (HEAD -> master, origin/master) cccc
6bc4e26 cccc
d39c816 ccc
1e1acdc ccccccc
1937afe cccc
d331e12 ccc
1e46383 修改头图地址
47ba328 ccc
22b7c49 开始学习 Kubernetes
3f0e99e Merge branch 'master' of github.com:alsritter/TeaNotes
9eada7b ccc
bd4f9ff cccccccc
7835fdf Merge branch 'master' of github.com:alsritter/TeaNotes
cc2ce0d cccc
0058900 cc
....
$

可以加个 -数字 来设置显示多少行

$ git log --oneline -3
291ec4e (HEAD -> master, origin/master) cccc
6bc4e26 cccc
d39c816 ccc
$

graph 选项显示分支

还可以用 --graph 选项,查看历史中什么时候出现了分支、合并。

$ git log --graph

现在我们可以更清楚明了地看到何时工作分叉、又何时归并。

reverse 选项逆向现实 Log

可以用 --reverse 参数来逆向显示所有日志。

$ git log --reverse --oneline
3b58100 第一次版本提交
3e92c19 add test.txt
c1501a2 removed test.txt、add runoob.php
7774248 (change_site) changed the runoob.php
c68142b 修改代码
d5e9fc2 (HEAD -> master) Merge branch 'change_site'
$

查找指定用户

如果只想查找指定用户的提交日志可以使用命令:git log --author

$ git log --author=Linus --oneline -5
81b50f3 Move 'builtin-*' into a 'builtin/' subdirectory
3bb7256 make "index-pack" a built-in
377d027 make "git pack-redundant" a built-in
b532581 make "git unpack-file" a built-in
112dd51 make "mktag" a built-in
$

隐藏合并提交

有时查日志不想看合并的提交,可以使用 --no-merges 选项以隐藏合并提交

查找指定日期

如果要指定日期,可以执行几个选项:--since 和 --before,也可以用 --until 和 --after。

如下,要看 Git 项目中三周前且在四月十八日之后的所有提交,还用了 --no-merges 选项以隐藏合并提交

$ git log --oneline --before={3.weeks.ago} --after={2021-04-18} --no-merges

blame 显示指定文件修改记录

如果要查看指定文件的修改记录可以使用 git blame 命令,格式如下:

$ git blame <file>

git blame 命令是以列表形式显示修改记录(以行),如下实例:

git blame README.md
^e0fcd4e (alsritter 2022-02-19 15:18:43 +0800 1) # About
^e0fcd4e (alsritter 2022-02-19 15:18:43 +0800 2)
^e0fcd4e (alsritter 2022-02-19 15:18:43 +0800 3) This wiki page is synced from my blog posts.
^e0fcd4e (alsritter 2022-02-19 15:18:43 +0800 4)
^e0fcd4e (alsritter 2022-02-19 15:18:43 +0800 5) ## Website
^e0fcd4e (alsritter 2022-02-19 15:18:43 +0800 6)
^e0fcd4e (alsritter 2022-02-19 15:18:43 +0800 7) This website is built using Docusaurus 2, a modern static website generator.

文件比较

git diff apple.txt

# 但是如果提交到缓存区则无法比较
# 这时可以使用指针指向本地库来进行比较
git diff HEAD apple.txt

# 同理可以指向历史版本
git diff [历史记录] apple.txt

# 如果不带文件名则是比较多个文件
git diff